#gcc main.c -o main ./LIB/libliste.a ./LIB/libgraphe.a
#valgrind ./main

# Variables
CC = gcc
AR = ar
LISTELIB = -lliste
GRAFLIB = -lgraphe
POSTLIB =  -lpost

# gestion des repertoires
SRCDIR = ./SRC
OBJDIR = ./OBJ
BINDIR = ./BIN
LIBDIR = ./LIB
INCDIR = ./INCLUDE
BUILDDIR = $(OBJDIR) $(BINDIR) $(LIBDIR)

# Variables propres a cette applie
LIB1 = $(LIBDIR)/$(LISTELIB)
LIB2 = $(LIBDIR)/$(GRAFLIB)
LIB3 = $(LIBDIR)/$(POSTLIB)
LIBS = $(LIB1) $(LIB2) $(LIB3)
MENU_O = $(OBJDIR)/menu.o
MAIN_O = $(OBJDIR)/main.o 
SRC = $(wildcard $(SRCDIR)/*.c)
OBJ = $(SRC:$(SRCDIR)/%.c=$(OBJDIR)/%.o)
EXE = $(BINDIR)/main

# cible principale
all : $(EXE)

# Regle principale avec l'edition de lien
$(EXE) : $(BUILDDIR) $(OBJ) $(LIBS)
	$(CC) -g -o $(EXE) $(MAIN_O) $(MENU_O) -I $(INCDIR) -L $(LIBDIR) -lgraphe -lliste -lpost

$(LIB1) : 
	$(AR) r $(LIBDIR)/libliste.a $(OBJDIR)/listesChainees.o ;
	ranlib $(LIBDIR)/libliste.a
	
$(LIB2) : 
	$(AR) r $(LIBDIR)/libgraphe.a $(OBJDIR)/graphes.o $(OBJDIR)/listesChainees.o;
	ranlib $(LIBDIR)/libgraphe.a
	
$(LIB3) :
	$(AR) r $(LIBDIR)/libpost.a $(OBJDIR)/postier.o $(OBJDIR)/graphes.o $(OBJDIR)/listesChainees.o;
	ranlib $(LIBDIR)/libpost.a

#note: l'option -w supprime les warnings et l'option -o permet d'indiquer le nom du fichier (pour son emplacement)
$(OBJDIR)/%.o: $(SRCDIR)/%.c $(OBJDIR)
	$(CC) -c -w -o $(OBJDIR)/$*.o -I $(INCDIR) $(SRCDIR)/$*.c
	
$(BINDIR) :
	mkdir -p $(BINDIR)
    
$(OBJDIR) :
	mkdir -p $(OBJDIR)
    
$(LIBDIR) :
	mkdir -p $(LIBDIR)

# Nettoyage des fichiers intermediaires, des bibliotheques et des executables (plus leurs dossiers)
clean : 
	rm -r $(BINDIR);
	rm -r $(LIBDIR);
	rm -r $(OBJDIR)

